package com.example.activiti.service;

import com.example.activiti.common.core.page.PageDomain;
import com.example.activiti.domain.dto.DefinitionIdDTO;
import com.example.activiti.domain.dto.ProcessDefinitionDTO;
import com.github.pagehelper.Page;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;


/**
 * 汇讯数码科技(深圳)有限公司
 * 创建日期:2020/10/22-16:34
 * 版本   开发者     日期
 * 1.0    Danny    2020/10/22
 *
 * @author Administrator
 */
public interface IProcessDefinitionService {
    /**
     * 获取流程定义集合
     *
     * @param processDefinition 筛选参数
     * @param pageDomain        分页参数
     * @return Page 分页信息
     */
    Page<ProcessDefinitionDTO> selectProcessDefinitionList(ProcessDefinitionDTO processDefinition, PageDomain pageDomain);

    /**
     * 获取实例
     *
     * @param instanceId 实例ID
     * @return 实例对象
     */
    DefinitionIdDTO getDefinitionsByInstanceId(String instanceId);

    /**
     * 删除流程定义
     *
     * @param id 流程ID
     * @return 执行标志
     */
    int deleteProcessDefinitionById(String id);

    /**
     * 上传并部署流程定义
     *
     * @param file 流程文件
     */
    void uploadStreamAndDeployment(MultipartFile file);


    /**
     * 通过stringBPMN添加流程定义
     * @param stringBPMN
     * @return
     */
    public void addDeploymentByString(String stringBPMN );

    /**
     * 启动挂起流程流程定义
     *
     * @param id           流程定义id
     * @param suspendState 流程状态
     * @return
     */
    void suspendOrActiveApply(String id, Integer suspendState);

    /**
     * 获取流程定义XML
     *
     * @param response     响应
     * @param deploymentId 部署ID
     * @param resourceName 资源名称
     */
    void getProcessDefineXml(HttpServletResponse response, String deploymentId, String resourceName);
}
